{$CLEO .s}
{$INCLUDE_ONCE ../cleo_tester.inc}

script_name "0AA4"
test("0AA4 (get_dynamic_library_procedure)", tests)
terminate_this_custom_script

function tests

    it("should return address of Sleep function from kernel32.dll", test1)
    it("should get export by index", test2)
    return
    
    function test1
        int load_library_addr = read_memory 0x858070 4 false
        trace "Address of LoadLibrary function is %d" load_library_addr

        int kernel_dll_addr = call_function_return {address} load_library_addr {numParams} 1 {pop} 0 {funcParams} "kernel32.dll" // tested opcode
        if
            // lib address can be any valid pointer, not necessarily one loaded with 0AA2 opcode
            int sleep_addr = get_dynamic_library_procedure {procName} "Sleep" {DynamicLibrary} kernel_dll_addr
        then
            assert(true)
        else
            assert(false)
        end
    end
    
    function test2
        int load_library_addr = read_memory 0x858070 4 false

        int kernel_dll_addr = call_function_return {address} load_library_addr {numParams} 1 {pop} 0 {funcParams} "kernel32.dll" // tested opcode
        if
            // lib address can be any valid pointer, not necessarily one loaded with 0AA2 opcode
            int sleep_addr = get_dynamic_library_procedure {procName} 1 {DynamicLibrary} kernel_dll_addr
        then
            assert(true)
        else
            assert(false)
        end
    end
end
